home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / languages / obrn-a_1.5_lib.lha / oberon-a / source1.lha / source / amiga / Hardware.mod < prev    next >
Encoding:
Text File  |  1995-01-26  |  14.2 KB  |  534 lines

  1. (**************************************************************************
  2.  
  3.      $RCSfile: Hardware.mod $
  4.   Description: Definitions for Amiga hardware and custom chips
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 3.7 $
  8.       $Author: fjc $
  9.         $Date: 1995/01/26 02:39:55 $
  10.  
  11.   Includes Release 40.15
  12.  
  13.   (C) Copyright 1985-1993 Commodore-Amiga, Inc.
  14.       All Rights Reserved
  15.  
  16.   Oberon-A interface Copyright © 1994-1995, Frank Copeland.
  17.   This file is part of the Oberon-A Interface.
  18.   See Oberon-A.doc for conditions of use and distribution.
  19.  
  20. ***************************************************************************)
  21.  
  22. <* STANDARD- *> <* INITIALISE- *> <* MAIN- *>
  23. <*$ CaseChk-  IndexChk- LongVars+ NilChk-  *>
  24. <*$ RangeChk- StackChk- TypeChk-  OvflChk- *>
  25.  
  26. MODULE [2] Hardware;
  27.  
  28. IMPORT SYS := SYSTEM, e := Exec, s := Sets;
  29.  
  30. (*
  31. **      $VER: adkbits.h 39.1 (18.9.92)
  32. **
  33. **      bit definitions for adkcon register
  34. *)
  35.  
  36. CONST
  37.  
  38.   adkSet   * = 15; (* standard set/clear bit *)
  39.   preComp1 * = 14; (* two bits of precompensation *)
  40.   preComp0 * = 13;
  41.   mfmPrec  * = 12; (* use mfm style precompensation *)
  42.   uartBrk  * = 11; (* force uart output to zero *)
  43.   wordSync * = 10; (* enable DSKSYNC register matching *)
  44.   msbSync  * =  9; (* (Apple GCR Only) sync on MSB for reading *)
  45.   fast     * =  8; (* 1 -> 2 us/bit (mfm), 2 -> 4 us/bit (gcr) *)
  46.   use3pn   * =  7; (* use aud chan 3 to modulate period of ?? *)
  47.   use2p3   * =  6; (* use aud chan 2 to modulate period of 3 *)
  48.   use1p2   * =  5; (* use aud chan 1 to modulate period of 2 *)
  49.   use0p1   * =  4; (* use aud chan 0 to modulate period of 1 *)
  50.   use3vn   * =  3; (* use aud chan 3 to modulate volume of ?? *)
  51.   use2v3   * =  2; (* use aud chan 2 to modulate volume of 3 *)
  52.   use1v2   * =  1; (* use aud chan 1 to modulate volume of 2 *)
  53.   use0v1   * =  0; (* use aud chan 0 to modulate volume of 1 *)
  54.  
  55.   pre000ns  * = {};                     (* 000 ns of precomp *)
  56.   pre140ns  * = { preComp0 };           (* 140 ns of precomp *)
  57.   pre280ns  * = { preComp1 };           (* 280 ns of precomp *)
  58.   pre560ns  * = { preComp0, preComp1 }; (* 560 ns of precomp *)
  59.  
  60. (*
  61. **      $VER: blit.h 39.1 (18.9.92)
  62. **
  63. **      Defines for direct hardware use of the blitter.
  64. *)
  65.  
  66. CONST
  67.  
  68.   hSizeBits* = 6;
  69.   vSizeBits* = 16-hSizeBits;
  70.   hSizeMask* = 3FH;        (* 2^6 -- 1 *)
  71.   vSizeMask* = 3FFH;       (* 2^10 - 1 *)
  72.  
  73. (* all agnii support horizontal blit of at least 1024 bits (128 bytes) wide *)
  74. (* some agnii support horizontal blit of up to 32768 bits (4096 bytes) wide *)
  75.  
  76. (* #ifndef  NO_BIG_BLITS *)
  77.  
  78.   minBytesPerRow * = 128;
  79.   maxBytesPerRow * = 4096;
  80.  
  81. (* #else *)
  82.  
  83. (* maxBytesPerRow * = 128; *)
  84.  
  85. (* #endif *)
  86.  
  87. (* definitions for blitter control register 0 *)
  88.  
  89.   abc   * = 7;
  90.   abnc  * = 6;
  91.   anbc  * = 5;
  92.   anbnc * = 4;
  93.   nabc  * = 3;
  94.   nabnc * = 2;
  95.   nanbc * = 1;
  96.   nanbnc* = 0;
  97.  
  98. (* some commonly used operations *)
  99.   aORb   * = { abc, anbc, nabc, abnc, anbnc, nabnc };
  100.   aORc   * = { abc, nabc, abnc, anbc, nanbc, anbnc };
  101.   aXORc  * = { nabc, abnc, nanbc, anbnc };
  102.   aTOd   * = { abc, anbc, abnc, anbnc };
  103.  
  104.   dest * = 8;
  105.   srcC * = 9;
  106.   srcB * = 10;
  107.   srcA * = 11;
  108.   ash1 * = 12;
  109.   ash2 * = 13;
  110.   ash4 * = 14;
  111.   ash8 * = 15;
  112.  
  113.   desc * = 1;         (* blitter descend direction *)
  114.  
  115.   aShiftShift * = 12;       (* bits to right align ashift value *)
  116.   bShiftShift * = 12;       (* bits to right align bshift value *)
  117.  
  118. (* definations for blitter control register 1 *)
  119.   lineMode    * = 0;
  120.   fillOr      * = 3;
  121.   fillXor     * = 4;
  122.   fillCarryIn * = 2;
  123.   oneDot      * = 1;      (* one dot per horizontal line *)
  124.   ovFlag      * = 5;
  125.   signFlag    * = 6;
  126.   blitReverse * = 1;
  127.  
  128.   sud         * = {fillXor};
  129.   sul         * = {fillOr};
  130.   aul         * = {fillCarryIn};
  131.  
  132.   octant8  * = sul+sud;
  133.   octant7  * = aul;
  134.   octant6  * = aul+sul;
  135.   octant5  * = aul+sul+sud;
  136.   octant4  * = aul+sud;
  137.   octant3  * = sul;
  138.   octant2  * = {};
  139.   octant1  * = sud;
  140.  
  141. (* stuff for blit qeuer *)
  142.  
  143. TYPE
  144.  
  145.   BltnodePtr* = POINTER TO Bltnode;
  146.   Bltnode* = RECORD
  147.     n       * : BltnodePtr;
  148.     function* : e.PROC;
  149.     stat    * : CHAR;
  150.     blitsize* : INTEGER;
  151.     beamsync* : INTEGER;
  152.     cleanup * : e.PROC;
  153.   END; (* Bltnode *)
  154.  
  155. CONST
  156.  
  157. (* defined bits for bltstat *)
  158.   cleanup* = 40H;
  159.   cleanme* = cleanup;
  160.  
  161.  
  162. (*
  163. **      $VER: cia.h 39.1 (18.9.92)
  164. **
  165. **      registers and bits in the Complex Interface Adapter (CIA) chip
  166. *)
  167.  
  168.  
  169. (*
  170.  * ciaa is on an ODD address (e.g. the low byte) -- $bfe001
  171.  * ciab is on an EVEN address (e.g. the high byte) -- $bfd000
  172.  *
  173.  * do this to get the definitions:
  174.  *    extern struct CIA ciaa, ciab;
  175.  *)
  176.  
  177.  
  178. TYPE
  179.  
  180.   Pad = ARRAY 254 OF SHORTINT;
  181.  
  182.   CIAPtr* = POINTER TO CIA;
  183.   CIA* = RECORD
  184.     pra   * : s.SET8;    pad0 * : Pad;
  185.     prb   * : s.SET8;    pad1 * : Pad;
  186.     ddra  * : s.SET8;    pad2 * : Pad;
  187.     ddrb  * : s.SET8;    pad3 * : Pad;
  188.     talo  * : SHORTINT;  pad4 * : Pad;
  189.     tahi  * : SHORTINT;  pad5 * : Pad;
  190.     tblo  * : SHORTINT;  pad6 * : Pad;
  191.     tbhi  * : SHORTINT;  pad7 * : Pad;
  192.     todlow* : SHORTINT;  pad8 * : Pad;
  193.     todmid* : SHORTINT;  pad9 * : Pad;
  194.     todhi * : SHORTINT;  pad10* : Pad;
  195.     unusedreg* : s.SET8; pad11* : Pad;
  196.     sdr   * : SHORTINT;  pad12* : Pad;
  197.     icr   * : s.SET8;    pad13* : Pad;
  198.     cra   * : s.SET8;    pad14* : Pad;
  199.     crb   * : s.SET8;
  200.   END; (* CIA *)
  201.  
  202.  
  203. CONST
  204.  
  205. (* interrupt control register bit numbers *)
  206.   ta     * = 0;
  207.   tb     * = 1;
  208.   alrm   * = 2;
  209.   sp     * = 3;
  210.   flg    * = 4;
  211.   ir     * = 7;
  212.   setClr * = 7;
  213.  
  214. (* control register A bit numbers *)
  215.   craStart  * = 0;
  216.   craPbon   * = 1;
  217.   craOutmode* = 2;
  218.   craRunmode* = 3;
  219.   craLoad   * = 4;
  220.   craInmode * = 5;
  221.   craSpmode * = 6;
  222.   craTodin  * = 7;
  223.  
  224. (* control register B bit numbers *)
  225.   crbStart  * = 0;
  226.   crbPbon   * = 1;
  227.   crbOutmode* = 2;
  228.   crbRunmode* = 3;
  229.   crbLoad   * = 4;
  230.   crbInmode0* = 5;
  231.   crbInmode1* = 6;
  232.   crbAlarm  * = 7;
  233.  
  234. (*
  235.  * Port definitions -- what each bit in a cia peripheral register is tied to
  236.  *)
  237.  
  238. (* ciaa port A (0BFE001H) *)
  239.   gamePort1 * = 7;   (* gameport 1, pin 6 (fire button) *)
  240.   gamePort0 * = 6;   (* gameport 0, pin 6 (fire button) *)
  241.   dskRdy    * = 5;   (* disk ready *)
  242.   dskTrack0 * = 4;   (* disk on track 00 *)
  243.   dskProt   * = 3;   (* disk write protect *)
  244.   dskChange * = 2;   (* disk change *)
  245.   led       * = 1;   (* led light control (0==>bright) *)
  246.   overlay   * = 0;   (* memory overlay bit *)
  247.  
  248. (* ciaa port B (0BFE101H) -- parallel port *)
  249.  
  250. (* ciab port A (0BFD000H) -- serial and printer control *)
  251.   comDTR    * = 7;   (* serial Data Terminal Ready *)
  252.   comRTS    * = 6;   (* serial Request to Send *)
  253.   comCD     * = 5;   (* serial Carrier Detect *)
  254.   comCTS    * = 4;   (* serial Clear to Send *)
  255.   comDSR    * = 3;   (* serial Data Set Ready *)
  256.   prtrSel   * = 2;   (* printer SELECT *)
  257.   prtrPOut  * = 1;   (* printer paper out *)
  258.   prtrBusy  * = 0;   (* printer busy *)
  259.  
  260. (* ciab port B (0BFD100H) -- disk control *)
  261.   dskMotor  * = 7;   (* disk motorr *)
  262.   dskSel3   * = 6;   (* disk select unit 3 *)
  263.   dskSel2   * = 5;   (* disk select unit 2 *)
  264.   dskSel1   * = 4;   (* disk select unit 1 *)
  265.   dskSel0   * = 3;   (* disk select unit 0 *)
  266.   dskSide   * = 2;   (* disk side select *)
  267.   dskDirec  * = 1;   (* disk direction of seek *)
  268.   dskStep   * = 0;   (* disk step heads *)
  269.  
  270.  
  271. (* cia addresses, initialised to point to correct addresses *)
  272.  
  273. VAR
  274.   ciaa* : CIAPtr;
  275.   ciab* : CIAPtr;
  276.  
  277.  
  278. (*
  279. **      $VER: custom.h 39.1 (18.9.92)
  280. **
  281. **      Offsets of Amiga custom chip registers
  282. *)
  283.  
  284.  
  285. (*
  286.  * do this to get base of custom registers:
  287.  * extern struct Custom custom;
  288.  *)
  289.  
  290.  
  291. TYPE
  292.  
  293.   Coord      * = RECORD v*,h*: SHORTINT END;
  294.   SerialInfo * = RECORD flags * : s.SET8; data * : CHAR END;
  295.   DiskInfo   * = RECORD flags * : s.SET8; data * : SYS.BYTE END;
  296.  
  297.   AudChannelPtr* = POINTER TO AudChannel;
  298.   AudChannel* = RECORD
  299.     ptr* : e.APTR;      (* ptr to start of waveform data *)
  300.     len* : e.UWORD;     (* length of waveform in words *)
  301.     per* : e.UWORD;     (* sample period *)
  302.     vol* : e.UWORD;     (* volume *)
  303.     dat* : e.UWORD;     (* sample pair *)
  304.     pad* : ARRAY 2 OF e.UWORD;  (* unused *)
  305.   END; (* AudChannel *)
  306.   AudChannels* = ARRAY 4 OF AudChannel;
  307.  
  308.   SpriteDefPtr* = POINTER TO SpriteDef;
  309.   SpriteDef* = RECORD
  310.     pos  * : e.UWORD;
  311.     ctl  * : RECORD
  312.       ev    * : SYS.BYTE;
  313.       flags * : s.SET8;
  314.     END;
  315.     data * : LONGINT;
  316.   END; (* SpriteDef *)
  317.   SpriteDefs * = ARRAY 8 OF SpriteDef;
  318.  
  319.   CustomPtr* = POINTER TO Custom;
  320.   Custom* = RECORD
  321.     bltddat * : e.UWORD;
  322.     dmaconr * : s.SET16;
  323.     vposr   * : e.UWORD;
  324.     vhposr  * : e.UWORD;
  325.     dskdatr * : e.UWORD;
  326.     joy0dat * : Coord;
  327.     joy1dat * : Coord;
  328.     clxdat  * : s.SET16;
  329.     adkconr * : s.SET16;
  330.     pot0dat * : Coord;
  331.     pot1dat * : Coord;
  332.     potinp  * : s.SET16;
  333.     serdatr * : SerialInfo;
  334.     dskbytr * : DiskInfo;
  335.     intenar * : s.SET16;
  336.     intreqr * : s.SET16;
  337.     dskpt   * : e.APTR;
  338.     dsklen  * : e.UWORD;
  339.     dskdat  * : e.UWORD;
  340.     refptr  * : e.UWORD;
  341.     vposw   * : e.UWORD;
  342.     vhposw  * : e.UWORD;
  343.     copcon  * : s.SET16;
  344.     serdat  * : SerialInfo;
  345.     serper  * : e.UWORD;
  346.     potgo   * : s.SET16;
  347.     joytest * : Coord;
  348.     strequ  * : e.UWORD;
  349.     strvbl  * : e.UWORD;
  350.     strhor  * : e.UWORD;
  351.     strlong * : e.UWORD;
  352.     bltcon0 * : s.SET16;
  353.     bltcon1 * : s.SET16;
  354.     bltafwm * : s.SET16;
  355.     bltalwm * : s.SET16;
  356.     bltcpt  * : e.APTR;
  357.     bltbpt  * : e.APTR;
  358.     bltapt  * : e.APTR;
  359.     bltdpt  * : e.APTR;
  360.     bltsize * : e.UWORD;
  361.     pad2d   * : SYS.BYTE;
  362.     bltcon0l* : s.SET8; (* low 8 bits of bltcon0, write only *)
  363.     bltsizv * : e.UWORD;
  364.     bltsizh * : e.UWORD;     (* 5e *)
  365.     bltcmod * : e.UWORD;
  366.     bltbmod * : e.UWORD;
  367.     bltamod * : e.UWORD;
  368.     bltdmod * : e.UWORD;
  369.     pad34   * : ARRAY 4 OF e.UWORD;
  370.     bltcdat * : e.UWORD;
  371.     bltbdat * : e.UWORD;
  372.     bltadat * : e.UWORD;
  373.     pad3b   * : ARRAY 3 OF e.UWORD;
  374.     deniseid* : e.UWORD;   (* 7c *)
  375.     dsksync * : e.UWORD;
  376.     cop1lc  * : e.ULONG;
  377.     cop2lc  * : e.ULONG;
  378.     copjmp1 * : e.UWORD;
  379.     copjmp2 * : e.UWORD;
  380.     copins  * : e.UWORD;
  381.     diwstrt * : Coord;
  382.     diwstop * : Coord;
  383.     ddfstrt * : Coord;
  384.     ddfstop * : Coord;
  385.     dmacon  * : s.SET16;
  386.     clxcon  * : s.SET16;
  387.     intena  * : s.SET16;
  388.     intreq  * : s.SET16;
  389.     adkcon  * : s.SET16;
  390.     aud     * : AudChannels;
  391.     bplpt   * : ARRAY 8 OF e.APTR;
  392.     bplcon0 * : s.SET16;
  393.     bplcon1 * : s.SET16;
  394.     bplcon2 * : s.SET16;
  395.     bplcon3 * : s.SET16;
  396.     bpl1mod * : e.UWORD;
  397.     bpl2mod * : e.UWORD;
  398.     bplhmod * : e.UWORD;
  399.     pad86   * : e.UWORD;
  400.     bpldat  * : ARRAY 8 OF e.UWORD;
  401.     sprpt   * : ARRAY 8 OF e.APTR;
  402.     spr     * : SpriteDefs;
  403.     color   * : ARRAY 32 OF e.UWORD;
  404.     htotal  * : e.UWORD;
  405.     hsstop  * : e.UWORD;
  406.     hbstrt  * : e.UWORD;
  407.     hbstop  * : e.UWORD;
  408.     vtotal  * : e.UWORD;
  409.     vsstop  * : e.UWORD;
  410.     vbstrt  * : e.UWORD;
  411.     vbstop  * : e.UWORD;
  412.     sprhstrt* : e.UWORD;
  413.     sprhstop* : e.UWORD;
  414.     bplhstrt* : e.UWORD;
  415.     bplhstop* : e.UWORD;
  416.     hhposw  * : e.UWORD;
  417.     hhposr  * : e.UWORD;
  418.     beamcon0* : s.SET16;
  419.     hsstrt  * : e.UWORD;
  420.     vsstrt  * : e.UWORD;
  421.     hcenter * : e.UWORD;
  422.     diwhigh * : e.UWORD;    (* 1e4 *)
  423.     padf3   * : ARRAY 11 OF e.UWORD;
  424.     fmode   * : e.UWORD;
  425.   END; (* Custom *)
  426.  
  427. CONST
  428.  
  429. (* defines for beamcon register *)
  430.   varVBlank      * = 13;  (* Variable vertical blank enable *)
  431.   loLDis         * = 12;  (* long line disable *)
  432.   cscBlankEn     * = 11;  (* redirect composite sync *)
  433.   varVSync       * = 10;  (* Variable vertical sync enable *)
  434.   varHSync       * =  9;  (* Variable horizontal sync enable *)
  435.   varBeam        * =  8;  (* variable beam counter enable *)
  436.   displayDual    * =  7;  (* use UHRES pointer and standard pointers *)
  437.   displayPAL     * =  6;  (* set decodes to generate PAL display *)
  438.   varCSync       * =  5;  (* Variable composite sync enable *)
  439.   csBlank        * =  4;  (* Composite blank out to CSY* pin *)
  440.   cSyncTrue      * =  3;  (* composite sync true signal *)
  441.   vSyncTrue      * =  1;  (* vertical sync true *)
  442.   hSyncTrue      * =  0;  (* horizontal sync true *)
  443.  
  444. (* new defines for bplcon0 *)
  445.   useBplCon3    * = 1;
  446.  
  447. (* new defines for bplcon2 *)
  448.   zdCTen         * = 10; (* colormapped genlock bit *)
  449.   zdBPen         * = 11; (* use bitplane as genlock bits *)
  450.   zdBPSel0       * = 12; (* three bits to select one *)
  451.   zdBPSel1       * = 13; (* of 8 bitplanes in *)
  452.   zdBPSel2       * = 14; (* zdBPen genlock mode *)
  453.  
  454. (* defines for bplcon3 register *)
  455.   extBlnkEn      * = 0;  (* external blank enable *)
  456.   extBlkZD       * = 1;  (* external blank ored into trnsprncy *)
  457.   zdClkEn        * = 2;  (* zd pin outputs a 14mhz clock*)
  458.   brdnTran       * = 4;  (* border is opaque *)
  459.   brdnBlnk       * = 5;  (* border is opaque *)
  460.  
  461. (* Pointer to custom hardware *)
  462.  
  463. VAR
  464.  
  465.   custom* : CustomPtr;
  466.  
  467. (*
  468. **      $VER: dmabits.h 39.1 (18.9.92)
  469. **
  470. **      include file for defining dma control stuff
  471. *)
  472.  
  473. CONST
  474.  
  475. (* write definitions for dmaconw *)
  476.   dmaSet * = 15;
  477.   aud0   * = 0;
  478.   aud1   * = 1;
  479.   aud2   * = 2;
  480.   aud3   * = 3;
  481.   audio  * = {aud0, aud1, aud2, aud3}; (* 4 bit mask *)
  482.   disk   * = 4;
  483.   sprite * = 5;
  484.   blitter* = 6;
  485.   copper * = 7;
  486.   raster * = 8;
  487.   master * = 9;
  488.   blithog* = 10;
  489.   all* = {aud0 .. raster}; (* all dma channels *)
  490.  
  491.   bitSet * = {dmaSet};
  492.   bitClr * = {};
  493.  
  494. (* read definitions for dmaconr *)
  495. (* bits 0-8 correspnd to dmaconw definitions *)
  496.   bltDone   * = 14;
  497.   bltNZero  * = 13;
  498.  
  499.  
  500. (*
  501. **      $VER: intbits.h 39.1 (18.9.92)
  502. **
  503. **      bits in the interrupt enable (and interrupt request) register
  504. *)
  505.  
  506. CONST
  507.  
  508.   intSet  * =  15;  (* Set/Clear control bit. Determines if bits *)
  509.                     (* written with a 1 get set or cleared. Bits *)
  510.                     (* written with a zero are allways unchanged *)
  511.   intEn   * =  14;  (* Master interrupt (enable only ) *)
  512.   exter   * =  13;  (* External interrupt *)
  513.   dskSync * =  12;  (* Disk re-SYNChronized *)
  514.   rbf     * =  11;  (* serial port Receive Buffer Full *)
  515.   aud3i   * =  10;  (* Audio channel 3 block finished *)
  516.   aud2i   * =   9;  (* Audio channel 2 block finished *)
  517.   aud1i   * =   8;  (* Audio channel 1 block finished *)
  518.   aud0i   * =   7;  (* Audio channel 0 block finished *)
  519.   blit    * =   6;  (* Blitter finished *)
  520.   vertb   * =   5;  (* start of Vertical Blank *)
  521.   coper   * =   4;  (* Coprocessor *)
  522.   ports   * =   3;  (* I/O Ports and timers *)
  523.   softint * =   2;  (* software interrupt request *)
  524.   dskblk  * =   1;  (* Disk Block done *)
  525.   tbe     * =   0;  (* serial port Transmit Buffer Empty *)
  526.  
  527. <*$LongVars-*>
  528.  
  529. BEGIN
  530.   ciaa := SYS.VAL (CIAPtr, 00BFE001H);
  531.   ciab := SYS.VAL (CIAPtr, 00BFD000H);
  532.   custom := SYS.VAL (CustomPtr, 00DFF000H);
  533. END Hardware.
  534.